package com.campus.wall.ui;

import android.Manifest;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.Build;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import com.campus.wall.R;
import com.campus.wall.base.BaseMvpActivity;
import com.campus.wall.contract.ArContract;
import com.campus.wall.contract.NftContract;
import com.campus.wall.presenter.ArPresenter;
import com.campus.wall.presenter.MainPresenter;
import com.campus.wall.ui.window.PromitDialog;
import com.self.baseutile.components.CleanableEditText;
import com.self.baseutile.components.ToastUtils;

import java.io.IOException;

import butterknife.BindView;
import butterknife.OnClick;

public class ArActivity extends BaseMvpActivity<ArPresenter> implements ArContract.View {

    @BindView(R.id.surface_view)
    SurfaceView mSurfaceView;
    @BindView(R.id.btn_map)
    ImageView btn_map;
    private Camera mCamera;
    @BindView(R.id.book)
    LinearLayout book;
    @Override
    public int getLayoutId() {
        return R.layout.layout_ar;
    }

//    @OnClick(R.id.btn_back)
//    void btn_back(){
//        this.finish();
//    }


    @Override
    public void initView() {
        mPresenter = new ArPresenter(this);
        mPresenter.attachView(this);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 横屏
        SurfaceHolder mSurfaceHolder = mSurfaceView.getHolder();
        mSurfaceHolder.setFormat(PixelFormat.TRANSPARENT);
        mSurfaceHolder.addCallback(mSurfaceCallback);
    }

    @OnClick(R.id.btn_book)
    void btn_book(){
        book.setVisibility(View.VISIBLE);
        btn_map.setVisibility(View.GONE);
    }
    @OnClick(R.id.close)
    void close(){
        book.setVisibility(View.GONE);
        btn_map.setVisibility(View.VISIBLE);
    }
    @OnClick(R.id.btn_map)
    void btn_map(){

        ViewGroup.LayoutParams layoutParams =  btn_map.getLayoutParams();
        layoutParams.height = 600;//设置图片的高度
        layoutParams.width = 600; //设置图片的宽度
        btn_map.setLayoutParams(layoutParams);
        btn_map.setScaleType(ImageView.ScaleType.FIT_XY);

    }

    @OnClick(R.id.clockIn)
    void clockIn(){
        PromitDialog   promitDialog=new PromitDialog(this,"打卡成功");
        promitDialog.setCallback(new PromitDialog.Callback() {

            @Override
            public void confirm() {
                promitDialog.dismiss();
            }
        });
        promitDialog.show();
    }
    private SurfaceHolder.Callback mSurfaceCallback = new SurfaceHolder.Callback() {

        /**
         *  在 Surface 首次创建时被立即调用：活得叫焦点时。一般在这里开启画图的线程
         * @param surfaceHolder 持有当前 Surface 的 SurfaceHolder 对象
         */
        @Override
        public void surfaceCreated(SurfaceHolder surfaceHolder) {
            try {
                //打开硬件摄像头 这两句默认是后摄像头，如果指定摄像头用 ： Camera.open(CameraId) CameraId  0 （后置）  1 （前置）
                // Camera.open() 默认返回的后置摄像头信息 //导包得时候一定要注意是android.hardware.Camera
                // setCameraDisplayOrientation(MainActivity2.this,0,camera);

                //设置角度，此处 CameraId  0 （后置）  1 （前置）
                mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);//打开硬件摄像头，这里导包得时候一定要注意是android.hardware.Camera
                setCameraDisplayOrientation(0,mCamera);
                //此处也可以设置摄像头参数
                mCamera.setPreviewDisplay(surfaceHolder);//通过SurfaceView显示取景画面
                mCamera.startPreview();//开始预览
            } catch (IOException e) {
                Log.e("TAG", e.toString());
            }
        }

        /**
         *  在 Surface 格式 和 大小发生变化时会立即调用，可以在这个方法中更新 Surface
         * @param surfaceHolder   持有当前 Surface 的 SurfaceHolder 对象
         * @param format          surface 的新格式
         * @param width           surface 的新宽度
         * @param height          surface 的新高度
         */
        @Override
        public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {

        }

        /**
         *  在 Surface 被销毁时立即调用：失去焦点时。一般在这里将画图的线程停止销毁
         * @param surfaceHolder 持有当前 Surface 的 SurfaceHolder 对象
         */
        @Override
        public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
            if(mCamera != null){
                mCamera.stopPreview();
                mCamera.release();
            }
        }
    };

    public  void setCameraDisplayOrientation(
                                                   int cameraId, android.hardware.Camera camera) {

        Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
        //获取摄像头信息
        android.hardware.Camera.getCameraInfo(cameraId, info);
        int rotation = this.getWindowManager().getDefaultDisplay().getRotation();

        //获取摄像头当前的角度
        int degrees = 0;
        switch (rotation) {
            case Surface.ROTATION_0:
                degrees = 0;
                break;
            case Surface.ROTATION_90:
                degrees = 90;
                break;
            case Surface.ROTATION_180:
                degrees = 180;
                break;
            case Surface.ROTATION_270:
                degrees = 270;
                break;
        }

        int result;
        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
            //前置摄像头
            result = (info.orientation + degrees) % 360;
            result = (360 - result) % 360; // compensate the mirror
        } else {
            // back-facing  后置摄像头
            result = (info.orientation - degrees + 360) % 360;
        }
        camera.setDisplayOrientation(result);
    }
    @Override
    public void onSuccess() {

    }
}
